package apis

//
//import (
//	"fmt"
//	"time"
//)
//
//const (
//	MaxWorker = 5 //随便设置值
//	MaxQueue  = 5 // 随便设置值
//)
//
//// 一个可以发送工作请求的缓冲 channel
//var JobQueue chan Job
//
//func init() {
//	JobQueue = make(chan Job, MaxQueue)
//}
//
//type Payload interface{}
//
//type Job struct {
//	PayLoad   Payload
//	HandleJob func(job Payload) (interface{}, error)
//}
//
//type Worker struct {
//	WorkerPool chan chan Job
//	JobChannel chan Job
//	quit       chan bool
//}
//
//// 消费者从队列中取出该job时 执行具体的处理逻辑
//func (job Job) Execute() error {
//	_, err := job.HandleJob(job.PayLoad)
//	return err
//}
//
//func NewWorker(workerPool chan chan Job) Worker {
//	return Worker{
//		WorkerPool: workerPool,
//		JobChannel: make(chan Job),
//		quit:       make(chan bool),
//	}
//}
//
//// Start 方法开启一个 worker 循环，监听退出 channel，可按需停止这个循环
//func (w Worker) Start() {
//	defer func() {
//		if err := recover(); err != nil {
//			fmt.Println(err)
//			w.stop()
//		}
//	}()
//	go func() {
//		for {
//			// 将当前的 worker 注册到 worker 队列中
//			w.WorkerPool <- w.JobChannel
//			select {
//			case job := <-w.JobChannel:
//				// 	真正业务的地方
//				err := job.Execute()
//				if err != nil {
//					w.stop()
//				}
//				time.Sleep(500 * time.Millisecond)
//				fmt.Println(err)
//				//fmt.Printf("上传成功:%v\n", job.PayLoad.FilePath)
//			case <-w.quit:
//				return
//			}
//		}
//	}()
//}
//
//func (w Worker) stop() {
//	go func() {
//		w.quit <- true
//	}()
//}
//
//// 初始化操作
//
//type Dispatcher struct {
//	// 注册到 dispatcher 的 worker channel 池
//	WorkerPool chan chan Job
//}
//
//func NewDispatcher(maxWorkers int) *Dispatcher {
//	pool := make(chan chan Job, maxWorkers)
//	return &Dispatcher{WorkerPool: pool}
//}
//
//func (d *Dispatcher) Run() {
//	// 开始运行 n 个 worker
//	for i := 0; i < MaxWorker; i++ {
//		worker := NewWorker(d.WorkerPool)
//		worker.Start()
//	}
//	go d.dispatch()
//}
//
//func (d *Dispatcher) dispatch() {
//	for {
//		select {
//		case job := <-JobQueue:
//			go func(job Job) {
//				// 尝试获取一个可用的 worker job channel，阻塞直到有可用的 worker
//				jobChannel := <-d.WorkerPool
//				// 分发任务到 worker job channel 中
//				jobChannel <- job
//			}(job)
//		}
//	}
//}
